FastAPI তে Query Parameters এবং Path Parameters ব্যবস্থাপনা খুবই সহজ এবং শক্তিশালী। এই প্যারামিটারগুলি URL-এর মাধ্যমে ডাটা গ্রহণ করতে ব্যবহৃত হয়, তবে তাদের ব্যবহার এবং উদ্দেশ্য ভিন্ন। এখানে Query Parameters এবং Path Parameters ব্যবহারের বিস্তারিত ব্যাখ্যা দেওয়া হলো।
Path Parameters
Path Parameters হল URL-এর অংশ যা {} ব্র্যাকেটে ব্যবহার করে ডাইনামিক রাউটিং সাপোর্ট করে। এটি API-র URL-এর মধ্যে ডাটা পাঠানোর জন্য ব্যবহৃত হয়।
উদাহরণ: Path Parameter ব্যবহার
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
এখানে, item_id হল একটি Path Parameter। URL থেকে এই প্যারামিটারটি সংগ্রহ করা হয় এবং item_id হিসেবে ফাংশনে প্রেরণ করা হয়।
রিকোয়েস্ট উদাহরণ:
GET /items/123
রেসপন্স:
{
"item_id": 123
}
যদি ব্যবহারকারী অন্য একটি item_id পাঠায়, যেমন /items/456, তাহলে রেসপন্স হবে:
{
"item_id": 456
}
Path Parameters-এ টাইপ ভ্যালিডেশন
FastAPI স্বয়ংক্রিয়ভাবে Path Parameters এর টাইপ যাচাই করে। এখানে item_id একটি int টাইপ, এবং FastAPI এটি স্বয়ংক্রিয়ভাবে যাচাই করে।
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
যদি item_id সঠিক টাইপ না হয় (যেমন স্ট্রিং বা অন্য কিছু), তাহলে FastAPI ত্রুটি দেখাবে:
রিকোয়েস্ট উদাহরণ:
GET /items/abc
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["path", "item_id"],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
Query Parameters
Query Parameters URL এর শেষে ? দিয়ে শুরু হয় এবং প্যারামিটারগুলোকে & দিয়ে আলাদা করা হয়। এটি ঐচ্ছিক এবং ইউজারদের থেকে অতিরিক্ত তথ্য সংগ্রহ করতে ব্যবহৃত হয়।
উদাহরণ: Query Parameter ব্যবহার
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_items(q: str = None, limit: int = 10):
return {"query": q, "limit": limit}
এখানে, q এবং limit হল Query Parameters। q প্যারামিটার ঐচ্ছিক, এবং limit প্যারামিটারটির ডিফল্ট মান 10।
রিকোয়েস্ট উদাহরণ:
GET /items/?q=fastapi&limit=5
রেসপন্স:
{
"query": "fastapi",
"limit": 5
}
যদি q প্যারামিটার পাঠানো না হয়, তবে রেসপন্সে null বা ডিফল্ট মান হবে।
রিকোয়েস্ট উদাহরণ:
GET /items/ (কোনো query প্যারামিটার ছাড়া)
রেসপন্স:
{
"query": null,
"limit": 10
}
Path এবং Query Parameters একসাথে ব্যবহারের উদাহরণ
FastAPI তে আপনি Path Parameters এবং Query Parameters একসাথে ব্যবহার করতে পারেন।
উদাহরণ: Path এবং Query Parameters একসাথে
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None, limit: int = 10):
return {"item_id": item_id, "query": q, "limit": limit}
এখানে, item_id হলো Path Parameter এবং q এবং limit হলো Query Parameters।
রিকোয়েস্ট উদাহরণ:
GET /items/123?q=fastapi&limit=5
রেসপন্স:
{
"item_id": 123,
"query": "fastapi",
"limit": 5
}
Path Parameters এবং Query Parameters Validation
FastAPI তে আপনি Path Parameters এবং Query Parameters উভয় ক্ষেত্রেই টাইপ ভ্যালিডেশন প্রয়োগ করতে পারেন।
উদাহরণ: Path Parameter এবং Query Parameter Validation
from fastapi import FastAPI
from pydantic import conint
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None, limit: conint(ge=1, le=100) = 10):
return {"item_id": item_id, "query": q, "limit": limit}
এখানে, limit প্যারামিটারটি 1 থেকে 100 এর মধ্যে সীমাবদ্ধ।
রিকোয়েস্ট উদাহরণ:
GET /items/123?q=fastapi&limit=50
রেসপন্স:
{
"item_id": 123,
"query": "fastapi",
"limit": 50
}
ভুল ইনপুট উদাহরণ:
GET /items/123?q=fastapi&limit=200
(যেহেতু limit 100 এর বেশি, FastAPI ত্রুটি দেখাবে)
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "limit"],
"msg": "ensure this value is less than or equal to 100",
"type": "value_error.number.not_le"
}
]
}
Path Parameters এবং Query Parameters কাস্টমাইজেশন
আপনি Path Parameters এবং Query Parameters এর জন্য কাস্টম ভ্যালিডেশন ব্যবহার করতে পারেন, যেমন প্যাটার্নের সাথে মিলিয়ে যাচাই করা।
উদাহরণ: Path Parameter কাস্টম Regex Validation
from fastapi import FastAPI
from pydantic import constr
app = FastAPI()
@app.get("/items/{item_code}")
def read_item(item_code: constr(regex=r"^[A-Za-z0-9_]+$")):
return {"item_code": item_code}
এখানে, item_code একটি কাস্টম regex ব্যবহার করে যাচাই করা হয়েছে, যা শুধুমাত্র অক্ষর, সংখ্যা এবং আন্ডারস্কোর (_) অনুমোদন করে।
রিকোয়েস্ট উদাহরণ:
GET /items/abc_123
রেসপন্স:
{
"item_code": "abc_123"
}
রিকোয়েস্ট উদাহরণ (ভুল ইনপুট):
GET /items/abc!123
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["path", "item_code"],
"msg": "string does not match regex \"^[A-Za-z0-9_]+$\"",
"type": "value_error.str.regex"
}
]
}
FastAPI তে Path Parameters এবং Query Parameters ব্যবস্থাপনা অত্যন্ত সহজ এবং শক্তিশালী। FastAPI-তে আপনি উভয় ধরনের প্যারামিটার ব্যবহারের মাধ্যমে খুবই নমনীয় এবং কার্যক্ষম API তৈরি করতে পারেন। এর সাথে, টাইপ ভ্যালিডেশন, কাস্টম ভ্যালিডেশন, এবং ডিফল্ট মানের ব্যবস্থাপনা সবকিছু স্বয়ংক্রিয়ভাবে করা হয়, যা API-কে আরও শক্তিশালী এবং ব্যবহারকারী-বান্ধব করে তোলে।
FastAPI তে Query Parameters হল URL এর শেষে যুক্ত হওয়া প্যারামিটার যা ? দিয়ে শুরু হয় এবং একাধিক প্যারামিটার & দ্বারা আলাদা হয়। Query Parameters সাধারণত ঐচ্ছিক (optional) হয় এবং URL এর মাধ্যমে ক্লায়েন্ট থেকে ইনপুট ডাটা গ্রহণ করতে ব্যবহৃত হয়। FastAPI এর সাহায্যে Query Parameters সহজেই গ্রহণ করা যায় এবং টাইপ ভ্যালিডেশনও করা হয়।
Query Parameters ব্যবস্থাপনা
Query Parameters এর মান URL এর পরে ? দিয়ে পাঠানো হয়। FastAPI এ Query Parameters ব্যবস্থাপনা খুবই সহজ এবং টাইপ সেফটি, ডিফল্ট মান, এবং ঐচ্ছিক প্যারামিটারসহ সাপোর্ট করা হয়।
উদাহরণ: Basic Query Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_items(q: str = None, limit: int = 10):
return {"query": q, "limit": limit}
এখানে:
q: একটি Query Parameter, যা ঐচ্ছিক এবং ডিফল্ট মানNone।limit: একটি Query Parameter, যার ডিফল্ট মান10।
রিকোয়েস্ট উদাহরণ:
GET /items/?q=fastapi&limit=5
রেসপন্স:
{
"query": "fastapi",
"limit": 5
}
যদি আপনি q অথবা limit প্যারামিটার না পাঠান, তাহলে FastAPI ডিফল্ট মান ব্যবহার করবে।
রিকোয়েস্ট উদাহরণ (Query Parameter ছাড়া):
GET /items/
রেসপন্স:
{
"query": null,
"limit": 10
}
Query Parameters এর Validation এবং Constraints
FastAPI তে Query Parameters এর জন্য validation এবং constraints ব্যবহার করা যায়, যেমন gt, lt, ge, le, min_length, max_length, ইত্যাদি। এটি ইনপুট ডাটার সঠিকতা নিশ্চিত করতে সহায়ক।
উদাহরণ: Query Parameter Validation
from fastapi import FastAPI
from pydantic import conint
app = FastAPI()
@app.get("/items/")
def read_items(skip: int = 0, limit: conint(ge=1, le=100) = 10):
return {"skip": skip, "limit": limit}
এখানে, limit Query Parameter এর জন্য ge=1 এবং le=100 কন্ডিশন ব্যবহার করা হয়েছে, যার মান ১ থেকে ১০০ এর মধ্যে হতে হবে। conint পিড্যানটিক ফাংশনটি টাইপ ভ্যালিডেশন করতে সহায়ক।
রিকোয়েস্ট উদাহরণ (সীমা ১ থেকে ১০০):
GET /items/?limit=50
রেসপন্স:
{
"skip": 0,
"limit": 50
}
রিকোয়েস্ট উদাহরণ (ভুল সীমা):
GET /items/?limit=150
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "limit"],
"msg": "ensure this value is less than or equal to 100",
"type": "value_error.number.not_le"
}
]
}
এখানে, 150 এর মান limit এর জন্য অনুমোদিত নয়, কারণ এটি ১০০ এর বেশি।
Required Query Parameters
FastAPI তে Query Parameters সাধারণত ঐচ্ছিক হয়। তবে, আপনি চাইলে কিছু প্যারামিটারকে required করতে পারেন।
উদাহরণ: Required Query Parameter
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_item(q: str):
return {"query": q}
এখানে, q একটি required Query Parameter। এর মান অবশ্যই রিকোয়েস্টে থাকতে হবে।
রিকোয়েস্ট উদাহরণ:
GET /items/?q=example
রেসপন্স:
{
"query": "example"
}
রিকোয়েস্ট উদাহরণ (Query Parameter না পাঠালে):
GET /items/
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "q"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
এখানে, q প্যারামিটার অবশ্যই পাঠাতে হবে, নাহলে FastAPI ত্রুটি দেখাবে।
Query Parameters এর Default Values
Query Parameters এর জন্য আপনি ডিফল্ট মানও নির্ধারণ করতে পারেন। এটি তখন ব্যবহৃত হয় যখন ক্লায়েন্ট প্যারামিটার না পাঠায়।
উদাহরণ: Default Values সহ Query Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_item(q: str = "default_query", limit: int = 10):
return {"query": q, "limit": limit}
এখানে, q এর ডিফল্ট মান "default_query" এবং limit এর ডিফল্ট মান 10।
রিকোয়েস্ট উদাহরণ (Query Parameter না পাঠালে):
GET /items/
রেসপন্স:
{
"query": "default_query",
"limit": 10
}
রিকোয়েস্ট উদাহরণ (Query Parameter সহ):
GET /items/?q=test&limit=5
রেসপন্স:
{
"query": "test",
"limit": 5
}
Multiple Query Parameters Handling
FastAPI তে আপনি একাধিক Query Parameters একসাথে গ্রহণ করতে পারেন।
উদাহরণ: Multiple Query Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_item(q: str = None, limit: int = 10, offset: int = 0):
return {"query": q, "limit": limit, "offset": offset}
এখানে, তিনটি Query Parameters q, limit, এবং offset একসাথে নেওয়া হচ্ছে।
রিকোয়েস্ট উদাহরণ:
GET /items/?q=fastapi&limit=5&offset=10
রেসপন্স:
{
"query": "fastapi",
"limit": 5,
"offset": 10
}
Query Parameters with Lists
FastAPI তে Query Parameters-এ list বা array ডাটা টাইপও গ্রহণ করা যায়।
উদাহরণ: List Query Parameters
from fastapi import FastAPI
from typing import List
app = FastAPI()
@app.get("/items/")
def read_items(q: List[str] = []):
return {"query": q}
এখানে, q একটি List of Strings হিসেবে Query Parameters গ্রহণ করছে।
রিকোয়েস্ট উদাহরণ:
GET /items/?q=fastapi&q=python
রেসপন্স:
{
"query": ["fastapi", "python"]
}
FastAPI তে Query Parameters ব্যবস্থাপনা অত্যন্ত সহজ এবং কার্যকর। Query Parameters এর মাধ্যমে আপনি URL-এ অতিরিক্ত ডাটা পাঠাতে পারেন, যা ঐচ্ছিক বা বাধ্যতামূলক হতে পারে। FastAPI স্বয়ংক্রিয়ভাবে টাইপ যাচাই, ভ্যালিডেশন এবং ডিফল্ট মান প্রয়োগ করে, যা API ডেভেলপমেন্টকে আরও কার্যক্ষম এবং নিরাপদ করে তোলে।
FastAPI-তে Query Parameters ব্যবহার করে URL-এর মাধ্যমে ডাটা পাঠানো হয়। এগুলি সাধারণত ঐচ্ছিক (Optional) এবং আবশ্যক (Required) হতে পারে। FastAPI এর মাধ্যমে Optional এবং Required Query Parameters ব্যবস্থাপনা করা সহজ।
এখানে আমরা দেখব কিভাবে Optional এবং Required Query Parameters তৈরি এবং কনফিগার করা যায় FastAPI-তে।
Query Parameters কী?
Query Parameters হল URL-এর অংশ যা ? দিয়ে শুরু হয়ে & দিয়ে আলাদা করা হয়। উদাহরণস্বরূপ:
/items/?q=example&limit=10
এখানে, q এবং limit হল Query Parameters।
Optional Query Parameters
Optional Query Parameters এমন প্যারামিটার যা যদি ব্যবহারকারী পাঠায় না, তবে তার জন্য ডিফল্ট মান ব্যবহার করা হবে। FastAPI তে আপনি ডিফল্ট মান দিয়ে Query Parameter তৈরি করতে পারেন, যা ঐচ্ছিক হিসেবে কাজ করবে।
উদাহরণ: Optional Query Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_items(q: str = None, limit: int = 10):
return {"query": q, "limit": limit}
এখানে:
qহল একটি ঐচ্ছিক Query Parameter (কারণ তার জন্য ডিফল্ট মানNoneদেওয়া হয়েছে)।limitহল একটি ঐচ্ছিক Query Parameter যার জন্য ডিফল্ট মান10দেওয়া হয়েছে।
রিকোয়েস্ট উদাহরণ (যদি q এবং limit না পাঠানো হয়):
GET /items/
রেসপন্স:
{
"query": null,
"limit": 10
}
এখানে, যেহেতু q পাঠানো হয়নি, তাই এটি null হিসাবে রিটার্ন হয়েছে এবং limit এর ডিফল্ট মান 10 হয়েছে।
রিকোয়েস্ট উদাহরণ (যদি q এবং limit পাঠানো হয়):
GET /items/?q=fastapi&limit=5
রেসপন্স:
{
"query": "fastapi",
"limit": 5
}
Required Query Parameters
Required Query Parameters হল সেই প্যারামিটার যেগুলি অবশ্যই ব্যবহারকারীর পক্ষ থেকে পাঠানো উচিত। যদি এই প্যারামিটারটি পাঠানো না হয়, FastAPI ত্রুটি প্রদান করবে।
উদাহরণ: Required Query Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_items(q: str, limit: int = 10):
return {"query": q, "limit": limit}
এখানে:
qএকটি আবশ্যক (Required) Query Parameter, যার মানstrটাইপ হবে। এটি ঐচ্ছিক নয়, তাই এটি অবশ্যই পাঠাতে হবে।limitহল একটি ঐচ্ছিক Query Parameter, যার জন্য ডিফল্ট মান10দেওয়া হয়েছে।
রিকোয়েস্ট উদাহরণ (যদি q পাঠানো না হয়):
GET /items/
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "q"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
এখানে, q প্যারামিটারটি পাঠানো না হলে FastAPI একটি ত্রুটি দেখাবে যে এই প্যারামিটারটি অবশ্যই প্রয়োজন।
রিকোয়েস্ট উদাহরণ (যদি q পাঠানো হয়):
GET /items/?q=fastapi&limit=5
রেসপন্স:
{
"query": "fastapi",
"limit": 5
}
এখানে, q প্যারামিটারটি পাঠানো হয়েছে এবং limit প্যারামিটারটি ডিফল্ট মান 10 হিসেবে ব্যবহার করা হয়েছে।
Query Parameters এর Validation
FastAPI তে আপনি Query Parameters এর জন্য validation কন্ডিশনও নির্ধারণ করতে পারেন, যেমন: min, max, gt, lt, regex ইত্যাদি। এটি আপনাকে ইনপুটের উপর সিমান্ত বা সীমাবদ্ধতা আরোপ করতে সহায়ক।
উদাহরণ: Query Parameters এর Validation
from fastapi import FastAPI
from pydantic import conint
app = FastAPI()
@app.get("/items/")
def read_items(q: str, limit: conint(ge=1, le=100) = 10):
return {"query": q, "limit": limit}
এখানে:
limitQuery Parameter এর জন্যconint(ge=1, le=100)কন্ডিশন দেওয়া হয়েছে, যা মানে হল যেlimitঅবশ্যই ১ থেকে ১০০ এর মধ্যে হতে হবে।
রিকোয়েস্ট উদাহরণ (যদি limit পাঠানো হয়):
GET /items/?q=fastapi&limit=50
রেসপন্স:
{
"query": "fastapi",
"limit": 50
}
রিকোয়েস্ট উদাহরণ (যদি limit এর বাইরে কোনো মান পাঠানো হয়):
GET /items/?q=fastapi&limit=150
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "limit"],
"msg": "ensure this value is less than or equal to 100",
"type": "value_error.number.not_le"
}
]
}
এখানে, limit প্যারামিটারটি ১০০ এর বেশি পাঠানো হয়েছে, ফলে FastAPI ত্রুটি দেখাবে।
Query Parameters এর সাথে Regular Expression (Regex) ব্যবহার
আপনি Query Parameters-এ regex ব্যবহার করে একটি নির্দিষ্ট প্যাটার্ন যাচাই করতে পারেন। উদাহরণস্বরূপ, কোনো প্যারামিটারকে নির্দিষ্ট আঙ্গিকে থাকতে হবে (যেমন, একটি ইমেইল ঠিকানা বা ফোন নম্বর)।
উদাহরণ: Regex Validation
from fastapi import FastAPI
from pydantic import constr
app = FastAPI()
@app.get("/items/")
def read_items(email: constr(regex=r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")):
return {"email": email}
এখানে, email Query Parameter এর জন্য একটি regex যোগ করা হয়েছে, যা একটি বৈধ ইমেইল ঠিকানা যাচাই করবে।
রিকোয়েস্ট উদাহরণ (সঠিক ইমেইল):
GET /items/?email=test@example.com
রেসপন্স:
{
"email": "test@example.com"
}
রিকোয়েস্ট উদাহরণ (ভুল ইমেইল):
GET /items/?email=test@.com
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "email"],
"msg": "string does not match regex \"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$\"",
"type": "value_error.str.regex"
}
]
}
FastAPI তে Optional এবং Required Query Parameters ব্যবস্থাপনা অত্যন্ত সহজ। আপনি Optional Query Parameters-এ ডিফল্ট মান প্রদান করতে পারেন, এবং Required Query Parameters-এ অবশ্যই মান পাঠাতে হবে। এর সাথে আপনি Validation এবং Regex ব্যবহার করে Query Parameters এর ওপর আরও কাস্টম কনস্ট্রেইন্ট প্রয়োগ করতে পারেন। FastAPI এই সমস্ত ভ্যালিডেশন এবং কাস্টমাইজেশন সহজভাবে পরিচালনা করে।
FastAPI তে Path Parameters ব্যবহার করে Dynamic Routing তৈরি করা সম্ভব। Path Parameters URL এর অংশ হিসেবে ডাইনামিক ডাটা গ্রহণ করতে ব্যবহৃত হয়। FastAPI স্বয়ংক্রিয়ভাবে Path Parameters এর টাইপ যাচাই করে, যা URL-এ ডাইনামিক পাথ প্যারামিটারগুলির মাধ্যমে ইনপুট ডাটা গ্রহণের প্রক্রিয়াকে সহজ এবং কার্যকর করে তোলে।
এখানে, আমরা দেখব কীভাবে FastAPI তে Path Parameters ব্যবহার করে ডাইনামিক রাউট তৈরি করা যায়।
Path Parameters কী?
Path Parameters হল URL-এ {} ব্র্যাকেটের মধ্যে থাকা ডাইনামিক প্যারামিটার, যা URL থেকে ডাটা গ্রহণ করতে সাহায্য করে। এটি অ্যাপ্লিকেশনের URL-এর নির্দিষ্ট অংশ থেকে ডাটা হ্যান্ডল করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি API যেখানে user_id অথবা item_id URL-এ প্যারামিটার হিসেবে দেওয়া যায়।
Step 1: FastAPI তে Path Parameters দিয়ে Dynamic Routing তৈরি করা
FastAPI-তে Path Parameters ব্যবহারের মাধ্যমে আমরা URL-এ ডাইনামিক প্যারামিটারগুলো গ্রহণ করতে পারি এবং সেই অনুযায়ী রাউট তৈরি করতে পারি।
উদাহরণ: Path Parameters দিয়ে Dynamic Routing
from fastapi import FastAPI
app = FastAPI()
# Path Parameter ব্যবহার
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
এখানে, {item_id} একটি Path Parameter, এবং item_id আমাদের ফাংশনের আর্গুমেন্ট হিসেবে পাঠানো হবে। FastAPI স্বয়ংক্রিয়ভাবে এই প্যারামিটারটির টাইপ যাচাই করে, কারণ আমরা এটি int টাইপ হিসেবে নির্ধারণ করেছি।
রিকোয়েস্ট উদাহরণ:
GET /items/123
রেসপন্স:
{
"item_id": 123
}
এখানে, item_id প্যারামিটারটি URL থেকে গ্রহণ করা হয়েছে এবং এটি ফাংশনে পাঠানো হয়েছে।
Step 2: Multiple Path Parameters (একাধিক Path Parameters)
FastAPI তে আপনি একাধিক Path Parameters একসাথে ব্যবহার করতে পারেন। এটি ডাইনামিক রাউটিং আরও শক্তিশালী এবং ফ্লেক্সিবল করে তোলে।
উদাহরণ: একাধিক Path Parameters
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}/items/{item_id}")
def read_user_item(user_id: int, item_id: int):
return {"user_id": user_id, "item_id": item_id}
এখানে, আমরা দুটি Path Parameters ব্যবহার করেছি: user_id এবং item_id। FastAPI স্বয়ংক্রিয়ভাবে এগুলোর টাইপ যাচাই করে এবং রিকোয়েস্টের মান অনুযায়ী এই প্যারামিটারগুলো ফাংশনে পাঠানো হয়।
রিকোয়েস্ট উদাহরণ:
GET /users/101/items/2001
রেসপন্স:
{
"user_id": 101,
"item_id": 2001
}
এখানে, আমরা user_id এবং item_id উভয় প্যারামিটারকেই URL থেকে গ্রহণ করেছি এবং সেগুলোকে রাউটিং ফাংশনে পাঠিয়েছি।
Step 3: Path Parameters-এ Default Values এবং Validation
FastAPI তে Path Parameters এর জন্য default values এবং validation নির্ধারণ করা যায়। যেমন, আপনি একটি Path Parameter কে ঐচ্ছিক (Optional) বা একটি নির্দিষ্ট সীমা (Range) মধ্যে সীমাবদ্ধ করতে পারেন।
উদাহরণ: Default Values এবং Validation সহ Path Parameters
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int = Path(..., ge=1, le=1000)): # ge=1, le=1000 validation
return {"item_id": item_id}
এখানে:
ge=1: এটি নিশ্চিত করবে যেitem_id১ বা তার বেশি হবে।le=1000: এটি নিশ্চিত করবে যেitem_id১০০০ বা তার কম হবে।
রিকোয়েস্ট উদাহরণ:
GET /items/50
রেসপন্স:
{
"item_id": 50
}
ভুল রিকোয়েস্ট উদাহরণ:
GET /items/1500
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["path", "item_id"],
"msg": "ensure this value is less than or equal to 1000",
"type": "value_error.number.not_le"
}
]
}
এখানে, item_id ১০০০ এর বেশি হলে FastAPI স্বয়ংক্রিয়ভাবে ত্রুটি দেখাবে।
Step 4: Path Parameters এবং Query Parameters একসাথে ব্যবহার
FastAPI তে Path Parameters এবং Query Parameters একসাথে ব্যবহার করা যেতে পারে। Path Parameters URL-এর অংশ হিসেবে পাঠানো হয়, আর Query Parameters URL-এর শেষে ? দিয়ে অতিরিক্ত ডাটা পাঠানোর জন্য ব্যবহৃত হয়।
উদাহরণ: Path Parameters এবং Query Parameters একসাথে
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
এখানে:
item_idহল Path Parameterqহল Query Parameter
রিকোয়েস্ট উদাহরণ:
GET /items/123?q=example
রেসপন্স:
{
"item_id": 123,
"query": "example"
}
এখানে, item_id Path Parameter হিসেবে পাঠানো হয়েছে এবং q Query Parameter হিসেবে পাঠানো হয়েছে।
Step 5: Path Parameters এর জন্য Custom Error Handling
FastAPI তে আপনি Path Parameters-এর জন্য কাস্টম error handling সেটআপ করতে পারেন। এর মাধ্যমে আপনি যদি কোনো অবৈধ ইনপুট পান, তবে একটি কাস্টম ত্রুটি মেসেজ ফেরত পাঠাতে পারেন।
উদাহরণ: কাস্টম Error Handling
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id < 1 or item_id > 100:
raise HTTPException(status_code=400, detail="Item ID must be between 1 and 100")
return {"item_id": item_id}
এখানে, যদি item_id ১ থেকে ১০০ এর বাইরে থাকে, তবে FastAPI একটি 400 Bad Request ত্রুটি মেসেজ সহ কাস্টম ত্রুটি দেখাবে।
রিকোয়েস্ট উদাহরণ:
GET /items/150
রেসপন্স:
{
"detail": "Item ID must be between 1 and 100"
}
FastAPI তে Path Parameters ব্যবহার করে ডাইনামিক রাউটিং তৈরি করা সহজ এবং কার্যকর। আপনি Path Parameters এর মাধ্যমে ডাইনামিক ডাটা গ্রহণ করতে পারেন এবং Validation ও Default Values ব্যবহার করে ইনপুট ডাটাকে যাচাই করতে পারেন। এর মাধ্যমে আপনি আরও স্কেলেবল এবং কার্যকর API তৈরি করতে সক্ষম হবেন।
FastAPI-তে Query Parameters এবং Path Parameters এর সাথে Type Hinting ব্যবহার করা হয়, যা ডেভেলপারদের কোড লেখার সময় টাইপ যাচাই এবং ডকুমেন্টেশন স্বয়ংক্রিয়ভাবে তৈরি করতে সাহায্য করে। Type Hinting ব্যবহার করলে FastAPI ইনপুট ডেটার টাইপ যাচাই করে এবং এই তথ্য Swagger UI বা ReDoc-এ ডকুমেন্টেশনের অংশ হিসেবে প্রদর্শিত হয়।
এই পর্বে, আমরা FastAPI-তে Query Parameters এবং Path Parameters এর সাথে Type Hinting ব্যবহারের সুবিধা এবং উদাহরণ দেখব।
Path Parameters এর সাথে Type Hinting
Path Parameters হল URL এর অংশ, যেখানে {} ব্র্যাকেটে ডাইনামিক প্যারামিটার পাঠানো হয়। FastAPI-তে Path Parameters এর জন্য Type Hinting সহজে ব্যবহার করা যায়।
উদাহরণ: Path Parameters এর সাথে Type Hinting
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
এখানে, item_id হল একটি Path Parameter, এবং তার টাইপ হল int। FastAPI স্বয়ংক্রিয়ভাবে item_id এর টাইপ যাচাই করবে এবং নিশ্চিত করবে যে এটি একটি পূর্ণসংখ্যা (integer)।
রিকোয়েস্ট উদাহরণ:
GET /items/123
রেসপন্স:
{
"item_id": 123
}
ভুল ইনপুট (যেমন স্ট্রিং):
GET /items/abc
রেসপন্স:
{
"detail": [
{
"loc": ["path", "item_id"],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
এখানে, FastAPI item_id এর টাইপ যাচাই করেছে এবং স্ট্রিং পেলে ত্রুটি দেখিয়েছে।
Query Parameters এর সাথে Type Hinting
Query Parameters হল URL এর শেষে ? দিয়ে শুরু হওয়া প্যারামিটার, যা ঐচ্ছিক এবং একাধিক প্যারামিটার পাস করা যায়।
উদাহরণ: Query Parameters এর সাথে Type Hinting
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_items(q: str = None, limit: int = 10):
return {"query": q, "limit": limit}
এখানে:
qএকটিstrটাইপের Query Parameter এবং এটি ঐচ্ছিক (Optional)।limitএকটিintটাইপের Query Parameter এবং এর ডিফল্ট মান10।
রিকোয়েস্ট উদাহরণ (Query Parameters):
GET /items/?q=fastapi&limit=5
রেসপন্স:
{
"query": "fastapi",
"limit": 5
}
রিকোয়েস্ট উদাহরণ (Query Parameter না পাঠালে):
GET /items/
রেসপন্স:
{
"query": null,
"limit": 10
}
এখানে, যদি q পাঠানো না হয় তবে তার ডিফল্ট মান None হবে এবং limit এর ডিফল্ট মান 10 হবে।
Path এবং Query Parameters একত্রে Type Hinting সহ ব্যবহার
FastAPI তে Path Parameters এবং Query Parameters একসাথে ব্যবহার করতে পারেন, এবং প্রতিটি প্যারামিটার জন্য টাইপ হিন্টিংও করতে পারেন।
উদাহরণ: Path এবং Query Parameters একত্রে
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None, limit: int = 10):
return {"item_id": item_id, "query": q, "limit": limit}
এখানে:
item_idহলো Path Parameter এবং এর টাইপint।qহলো Query Parameter এবং এর টাইপstr।limitহলো Query Parameter এবং এর টাইপint।
রিকোয়েস্ট উদাহরণ:
GET /items/123?q=fastapi&limit=5
রেসপন্স:
{
"item_id": 123,
"query": "fastapi",
"limit": 5
}
Type Validation এবং Constraints (সীমাবদ্ধতা)
FastAPI তে আপনি Path এবং Query Parameters এর জন্য বিভিন্ন ধরনের validation এবং constraints (সীমাবদ্ধতা) নির্ধারণ করতে পারেন।
উদাহরণ: Validation এবং Constraints সহ Path এবং Query Parameters
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int = Path(..., gt=0), q: str = Query(..., min_length=3, max_length=50)):
return {"item_id": item_id, "query": q}
এখানে:
item_idএকটিPath Parameterযাgt=0constraint দ্বারা যাচাই করা হয়েছে, মানে এটি ০ এর বেশি হতে হবে।qএকটিQuery Parameterযাmin_length=3এবংmax_length=50constraints দ্বারা যাচাই করা হয়েছে, মানে এটি ৩ থেকে ৫০ অক্ষরের মধ্যে হতে হবে।
রিকোয়েস্ট উদাহরণ:
GET /items/123?q=fastapi
রেসপন্স:
{
"item_id": 123,
"query": "fastapi"
}
রিকোয়েস্ট উদাহরণ (ত্রুটি, যদি q ছোট হয়):
GET /items/123?q=f
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["query", "q"],
"msg": "ensure this value has at least 3 characters",
"type": "value_error.string.min_length"
}
]
}
এখানে, q parameter এর জন্য min_length=3 ভ্যালিডেশন ব্যবহৃত হয়েছে, এবং যদি এটি ৩ অক্ষরের কম হয় তবে FastAPI ত্রুটি দেখাবে।
FastAPI তে Path Parameters এবং Query Parameters এর সাথে Type Hinting ব্যবহারে ডাটার টাইপ এবং ভ্যালিডেশন অত্যন্ত সহজে নিশ্চিত করা যায়। এর মাধ্যমে আপনি একটি পরিষ্কার এবং শক্তিশালী API তৈরি করতে পারেন। Type Hinting ব্যবহার করলে ডকুমেন্টেশন স্বয়ংক্রিয়ভাবে তৈরি হয় এবং ডেভেলপাররা সহজেই জানে কোন প্যারামিটার কী টাইপের হতে হবে। FastAPI স্বয়ংক্রিয়ভাবে প্যারামিটার যাচাই করে এবং ত্রুটি জানিয়ে দেয়, যা ডেভেলপমেন্টকে দ্রুত এবং নির্ভুল করে তোলে।
Read more